package com.xinjiang.electricpower.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.xinjiang.electricpower.domain.DTO.WorkOrderPoolDTO;
import com.xinjiang.electricpower.domain.DTO.XjOrderGeneralDTO;
import com.xinjiang.electricpower.domain.XjOrderGeneral;
import com.xinjiang.electricpower.domain.vo.*;

import java.util.List;

public interface IXjOrderGeneralService extends IService<XjOrderGeneral> {


    /**
     * 自定义分页
     *
     * @param page              分页对象
     * @param xjOrderGeneralDTO 工单DTO类
     * @return PageInfo<XjOrderGeneralVO> 返回工单实体类待处理分页信息
     */
    PageInfo<XjOrderGeneralVO> selectXjOrderGeneralPage(PageDTO<XjOrderGeneralVO> page, XjOrderGeneralDTO xjOrderGeneralDTO);

    /**
     * 自定义分页
     *
     * @param page              分页对象
     * @param workOrderPoolDTO 工单池DTO类
     * @return PageInfo<WorkOrderPoolVO> 返回工单池实体类待处理分页信息
     */
    PageInfo<WorkOrderPoolVO> selectXjOrderGeneralPoolPage(PageDTO<WorkOrderPoolVO> page, WorkOrderPoolDTO workOrderPoolDTO);
    /**
     * 查询工单列表无分页
     *
     * @param xjOrderGeneralDTO 通用工单DTO类
     * @return List<XjOrderGeneralVO> 返回工单列表
     */
    List<XjOrderGeneralVO> selectXjOrderGenerals(XjOrderGeneralDTO xjOrderGeneralDTO);

    /**
     * 查询工单列表无分页
     *
     * @param ids 批量id
     * @return List<XjOrderGeneralVO> 返回工单列表
     */
    List<XjOrderGeneralVO> selectXjOrderGenerals(String ... ids);

    /**
     * 查询工单列表无分页
     *
     * @param ids 批量id
     * @return  List<WorkOrderPoolVO> 返回工单池列表
     */
    List<WorkOrderPoolVO> selectWorkOrderPools(String ... ids);
    /**
     * 查询工单池列表无分页
     *
     * @param workOrderPoolDTO 工单池DTO类
     * @return List<WorkOrderPoolVO> 返回工单列表
     */
    List<WorkOrderPoolVO> selectWorkOrderPools(WorkOrderPoolDTO workOrderPoolDTO);

    /**
     * 查询总数
     *
     * @return Long
     */
    Long countOrderGeneral();
    /**
     * 查询总数
     *
     * @return Long
     */
    public Long countOrderGeneralByStatus();
    /**
     * 查询各个系统下的工单数
     *
     * @return Map<String, Long>
     */
    List<SystemOrdersVO> countSystemOrders();

    /**
     * 查询各个系统下的工单数
     *
     * @return Map<String, Long>
     */
    List<SystemOrdersVO> countSystemOrders(WorkOrderPoolDTO workOrderPoolDTO);

    /**
     * 查询待办工单数
     *
     * @return Long
     */
    Long countToDoOrder();
    /**
     * 查询各个台区下的工单数
     *
     * @param workOrderPoolDTO 工单池DTO类
     * @return List<TgWorkOrderStatisticVO> Tg工单列表
     */
    public List<TgWorkOrderStatisticVO> selectXjOrderGenerals(WorkOrderPoolDTO workOrderPoolDTO);
    /**
     * 查询各个工单预警类型下的工单数
     *
     * @param workOrderPoolDTO 工单池DTO类
     * @return List<TgWorkOrderStatisticVO> 统计各个预警类型工单数
     */
    public List<WarningUrgentVO> selectWorkOrderWarning(WorkOrderPoolDTO workOrderPoolDTO);

    /**
     * 查询指定年月各个系统下的工单数
     *
     * @param workOrderPoolDTO 工单池DTO类
     * @return List<TgWorkOrderStatisticVO> 统计各个预警类型工单数
     */
    public List<SystemOrdersVO> selectWorkOrderSystem(WorkOrderPoolDTO workOrderPoolDTO);
    /**
     * 查询指定年月各个工单性质下的工单数
     *
     * @param workOrderPoolDTO 工单池DTO类
     * @return List<WorkOrderNatureStatisticVO> 查询指定年月各个工单性质下的工单数
     */
    List<WorkOrderNatureStatisticVO> selectWorkOrderNature(WorkOrderPoolDTO workOrderPoolDTO);

    /**
     * 指定台区查询工单统计
     * @param workOrderPoolDTO
     * @return
     */
    List<TgWorkOrderStatisticVO> selectXjOrderGeneralsTest(WorkOrderPoolDTO workOrderPoolDTO);

    /**
     *工单业务占比
     * @param workOrderPoolDTO
     * @return
     */
    List<SystemOrdersVO> countSystemOrdersTest(WorkOrderPoolDTO workOrderPoolDTO);

    /**
     * 工单池列表
     * @param page
     * @param workOrderPoolDTO
     * @return
     */
    PageInfo<WorkOrderPoolVO> selectXjOrdralPoolPerGeneageTest(PageDTO<WorkOrderPoolVO> page, WorkOrderPoolDTO workOrderPoolDTO);

    /**
     * 统计指定年月各个系统/业务的工单数
     * @param workOrderPoolDTO
     * @return
     */
    List<SystemOrdersVO> selectWorkOrderSystemTest(WorkOrderPoolDTO workOrderPoolDTO);
}
